查看原文
其他

大学生恋爱情况分析

2017-10-01 张俊红 Python爱好者社区

作者:数据取经团——张俊红

数据取经团(公众号:zlx19930503)

专注R、Python数据分析挖掘、可视化、机器学习

特别申明:


1、本数据来源于网络,且数据量较小,故分析结果可能不具有普遍性,对于结果大家了解一下即可,不需要太在意,重点是分析过程。


2、本文图片较多,篇幅较长。


01|数据导入:


代码部分:


%matplotlib inline 

import matplotlib.pyplot as plt

import numpy as np

import pandas as pd

df=pd.read_csv("F:\\datasciene\\exercisedata\\data.csv",encoding="gbk")

print df.columns#查看有哪些索引值

df.head(2)#显示数据的前两行,查看数据呈现方式



02|数据预处理:


1、查看是否具有缺失值


如果有缺失值,则进行缺失值处理,可以选择填充或删掉。通过下面的截图看出没有缺失值,所以我们就跳过这一步。



2、值替换


为了便于后续的研究,需要把一些属性值替换成机器容易识别的符号。


代码部分:


df[u"性别"].replace([u"女",u"男"],["female","male"],inplace=True)#将性别男女替换成英文

df[u"年级"].replace([u"大一",u"大二",u"大三",u"大四"],["freshman","sophomore","junior","senior"],inplace=True)

df[u"眼镜"].replace([u"戴眼镜",u"不戴眼镜"],["wear","not_wear"],inplace=True)


值替换根据需要随时进行替换,有的一些属性值可能刚开始没想到会用到,在需要用的时候进行替换就可以。


03|描述性分析:


1、恋爱次数情况


代码部分:


grouped=df.groupby([u'恋爱次数']).count()[u'年级']

print "平均恋爱次数:",df[u'恋爱次数'].mean()

print "恋爱次数的中位数:",df[u'恋爱次数'].median()

grouped.plot(kind="bar",color="gray",align='center')

plt.xlabel('Times')

plt.ylabel('counts(person)')


通过结果发现:


  • 恋爱次数为1次的占比最多,其次是恋爱次数为0次的同学。

  • 平均恋爱次数: 1.30034129693。

  • 恋爱次数的中位数: 1.0。



2、被追人数情况:


代码部分:


grouped1=df.groupby([u'被追人数']).count()[u'年级']

print "平均被追人数:",df[u'被追人数'].mean()

print "被追人数的中位数:",df[u'被追人数'].median()

grouped1.plot(kind="bar",color="gray",align='center')

plt.xlabel('Times')

plt.ylabel('counts(person)')


通过结果发现:


  • 被追人数(次数)为0人的占比最多,其次是被追人数为1人的同学。

  • 平均被追人数(次数): 2.87。

  • 被追人数(次数)的中位数:2.0。



3、追求人数情况:


代码部分:


grouped2=df.groupby([u'追过人数']).count()[u'年级']

print "平均追过人数:",df[u'追过人数'].mean()

print "追过人数的中位数:",df[u'追过人数'].median()

grouped2.plot(kind="bar",color="gray",align='center')

plt.xlabel('Times')

plt.ylabel('counts(person)')


通过结果发现:


  • 追求人数(次数)为0人的占比最多,追求次数对应的人数一次递减。

  • 平均追求人数(次数):1.037。

  • 追求人数(次数)的中位数:1.0。



04|探索性分析(1):


接下来探索一下恋爱情况与性别的关系,所以先确认一下样本数据的男女比例是否一致。



结果显示男女比例几乎接近1:1,所以可以看成两者的比例是一致的。


1、恋爱次数与性别的关系:


代码部分:


grouped3=df.groupby([u'恋爱次数',u'性别']).count()[u'年级']

grouped3.plot(kind="bar",stacked="True",color=['r', 'g'],label=("female"))

plt.xlabel('Times&sex')

plt.ylabel('counts(person)')

plt.legend()


(0,female)表示恋爱0次中女性人数,其他类似。


通过结果发现:


  • 恋爱次数为0—1次时,男性人数多于女性,但是恋爱次数为2次时,女性人数反超男性人数,恋爱次数为3次时,女性又低于男性,当恋爱次数为4次时,女性对应的人数是男性对应人数的4倍,恋爱次数为5次的人群中只有女性。


2、被追人数与性别的关系:


代码部分:


grouped4=df.groupby([u'被追人数',u'性别']).count()[u"年级"]

grouped4.plot(kind="bar",stacked=True,color=['r', 'g'],label=("female"))

plt.xlabel('Times&sex')

plt.ylabel('counts(person)')

plt.legend()




通过结果发现:


  • 男生中有34.7%未被人追过,女生中有16.7%未被人追过。

  • 男生中被追为1次的人最多(除0次以外),而女生被追过5次的人最多。在被追次数为1-3次中,男生人数领先于女生,但是在4次以后,女生遥遥领先(除10次有个特殊点外,这个点可能是校草级别的人导致异常点出现的吧),由此可见,女生要么被追人数很少,要么就是同时被好多人追。(可能某个人在班里或者系里太出众,最后一个班或者是一个系的人都追她)


3、追过人数与性别的关系:


代码部分:


grouped5=df.groupby([u'追过人数',u'性别']).count()[u"年级"]

grouped5.plot(kind="bar",stacked=True,color=['r', 'g'],label=("female"))

plt.xlabel('Times&sex')

plt.ylabel('counts(person)')

plt.legend()



通过结果发现:


  • 除了追过人数为0次时对应的女生人数要多于男生,追过次数为1-4次中男生对应的人数都要高于女生,而5次以后又被女生反超。

  • 这个其实也是可以理解的,大部分女生相比于男生都比较害羞,不太好意思主动去追求,所以在1-4次时男生要明显多于女生,但是也有一些比较open的女生,会在5次以后对应的人数多于男生。


04|探索性分析(2):


接下来探索一下恋爱次数为0的同学们都有什么特征,或者是影响恋爱次数的因素有哪些?


代码部分:


zero=df[df[u"恋爱次数"]==0]#筛选出恋爱次数为0的同学

zero.head(2)



1、恋爱与男女比例关系:


有没有可能是这个学校本身男女比例的问题导致单身的存在,接下来看看单身群体中男女比例结构。(有的学校男女比例7:1,会是影响恋爱次数的一个重要原因)


代码部分:


grouped7=zero.groupby([u"性别"]).count()[u"年级"]

grouped7.plot(kind="bar",color="gray")

plt.xlabel('sex')

plt.ylabel('counts(people)')



通过结果发现:


  • 通过柱状图可以看出,单身群体中,男女比例接近于1:1,看来男女本身比例问题这个原因可以排除。


2、恋爱与年级关系


代码部分:


grouped8=zero.groupby([u"年级"]).count()[u"性别"]

grouped8.plot(kind="bar",color="gray")

plt.xlabel('grade')

plt.ylabel('counts(people)')



通过结果发现:


  • 恋爱和年级还真有点关系,大二中恋爱次数人数最少,这可能是大二已经经历了一年的大学生活,开始对这个学校慢慢熟悉起来,再加上也认识了一些人,具备了基础条件,所以恋爱的就会多起来。

  • 大三中恋爱次数为0的最多。


3、恋爱与追过和被追的关系:


代码部分:


grouped9=zero.groupby([u"追过人数",u"被追人数"]).count()[u"性别"]

grouped9.plot(kind="bar",color="gray")

plt.xlabel('Active and passive')

plt.ylabel('counts(people)')



通过结果发现:


  • 在恋爱次数为0的群体中,约一半的人追求人数和被追人数均为0,所以不主动可能至今是恋爱次数为0的主要原因吧。

  • 还会有一些主动追求过两次,被追求过10次这样的群体存在,这种群体可能是本身条件很好,所以追求人数很多,但是择偶标准也比较高,所以这么多人追求,依然保持恋爱次数为0。

  • 还有一些群体是主动追求过6、7次,被追求0次,恋爱次数依然为0。(好心疼他们)


4、恋爱次数与学生组织关系:


学生组织是我们结交人脉的一个重要渠道,如果我们没有加入学生组织,可能不会认识很多人,会没有追求目标,这可能是恋爱次数为0的一个原因。具体看看。


代码部分:


grouped10=zero.groupby([u"学生组织个数"]).count()[u"年级"]

grouped10.plot(kind="bar",stacked=True,color="gray")

plt.xlabel('counts')

plt.ylabel('counts(person)')



通过结果查看:


  • 在恋爱次数为0的群体中,大部分人还是至少有参加一个学生组织的,只有10%左右的人没有参加学生组织。所以可以排除这点原因。


5、恋爱与颜值的关系:


代码部分:


grouped12=zero.groupby([u"颜值"]).count()[u"年级"]

grouped12.plot(kind="bar",stacked=True,color="gray")

print "恋爱次数为0对应的平均颜值:",zero[u"颜值"].mean()

plt.xlabel('Beauty')

plt.ylabel('counts(person)')



通过结果查看可得:


  • 恋爱次数为0的群体的平均颜值为5.5(满分为10),众数为5。

  • 恋爱次数为0的人大部分颜值为中等水平,一部分是中等偏上,这一部分可能就是那些被追很多次,但是恋爱次数为0的人。


6、恋爱与身高的关系:


代码部分:


age_train_p=zero[u"身高"]

ages=np.arange(150,200,10)  #150~200岁,每10厘米一段(年龄最小153,最大为192)  

age_cut=pd.cut(age_train_p,ages)  #待分组值,分组条件

age_cut_grouped=age_train_p.groupby(age_cut).count()

age_cut_grouped.plot(kind="bar",color="gray")

plt.xlabel('height')

plt.ylabel('counts(person)')




通过结果查看可得:


  • 恋爱次数为0的群体中,大部分人的身高集中在(160,170),其次是(170,180)。个人觉得这个身高差不多了,所以就先判定恋爱次数与身高没有关系。


7、恋爱与寝室舍友情况的关系:


代码部分:52 29335 52 15289 0 0 4222 0 0:00:06 0:00:03 0:00:03 4222trong>


grouped13=zero.groupby([u"寝室同学情况"]).count()[u"年级"]

grouped13.plot(kind="bar",stacked=True,color="gray")

plt.xlabel('dorm_mate')

plt.ylabel('counts(person)')



通过结果查看可得:


  • 恋爱次数为0的群体中,大部分人的舍友也是单身,所以如果你想突破恋爱次数为0的记录,可以多和那些恋爱次数不为0的人接触,再或者是可以先鼓励你舍友脱单,这样在一定程度上有助于你脱单。

福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

关注后在公众号内回复“课程”即可获取:

1.崔老师爬虫实战案例免费学习视频。

2.丘老师数据科学入门指导免费学习视频。

3.陈老师数据分析报告制作免费学习视频。

4.玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。

5.丘老师Python网络爬虫实战免费学习视频。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存